<?php
    if(!defined("index")) die("<center>Goodbye. See you again.</center>");
    /*
    +--------------------------------------------------------------------------
    + @Author: Pham Trung Dung
    + @Location: Viet Nam
    + Email: dungptvn@gmail.com
    
    + =============================================
    + > File title: MySql Database
    + > File create time: 23/4/2005
    + > File last modife date: 5/8/2006
    + =============================================
    
    + Example:
    	// Define class
    + $DB = new database();
    	// Assign DB Informations
    + $DB -> db = array('host'=>'localhost','user'=>'root','pass'=>'','db'=>'');
    	// default value: 3306
    + $DB -> port = '';
    +--------------------------------------------------------------------------
    */
    class database 
    {
    	var $conn_id;
    	var $query_id;
    	var $result;
    	var $record;
    	var $db=array("host" => '' , "user" => "" , "pass" => "" , "db" => "");
    	var $port;
    	var $AddQuoteOnExecQuery = true;
		var $query_string;
    	var $querynum;
    	var $CacheData;
    	var $Debug = true;
    	
    	/*
    	// Constructor
    	*/
        function database() {
        	
    		if (strpos($this->db['host'],":")) {
    			
    			list($host,$port) = explode(":",$this->db['host']);
    			$this->port = $port;
    			
    		} else { 
    			// default mysql port
    			$this->port=3306; 
    		}
        }
    
     	// =========================================
        // CacheData
        // =========================================
        function Cache($k,$v)
        {
        	$this->CacheData[$k] = $v;
        }
        function CleanCache()
        {
        	$this->CacheData = null;
        }
        
        // =========================================
        // Connection
        // =========================================
    	/*
    	// mysql connection
    	*/
        function connect() {
        	
            $this->conn_id = @mysql_connect(
            	$this->db['host'].":".$this->port,
            	$this->db['user'],
            	$this->db['pass']
            );
            
            if (!$this->conn_id) $this->sql_error("Connection Error",'N/A');
            
            if (!mysql_select_db($this->db['db'], $this->conn_id)) $this->sql_error("Database Error",'N/A');
            
            return $this->conn_id;
        }
    
        // =========================================
        // Data handling
        // =========================================
        function quote($value)
    	{
    		if(is_array($value))
    		{
    			foreach ($value as $k=>$item) {
    				if (get_magic_quotes_gpc()) {
    					$value[$k] = stripslashes($item);
    					}
    				if (!is_numeric($value)) {
    					$value[$k] = "'" . mysql_real_escape_string($item) . "'";
    				} else $value[$k] = "'".$item."'";
    			}
    			return $value;
    		}
    		else
    		{
    			if (get_magic_quotes_gpc()) {
    				$value = stripslashes($value);
    			}
    			if (!is_numeric($value)) {
    				$value = "'" . mysql_real_escape_string($value) . "'";
    			} else $value = "'".$value."'";
    			return $value;
    		}
    	}
    	
        // =========================================
        // Query
        // =========================================
    	/*
    	// query execute
    	*/
    	function query($query_string) {
            
    		$this->querynum++;
    		$this->result = mysql_query($query_string,$this->conn_id);
    		if (!$this->result) $this->sql_error("Query Error",$query_string);
    		$this->query_string = $query_string;
    		
    		return $this->result;
    		$this->free_result($this->result);
    		
        }
    
        /*
    	// query execute
    	// return query result
    	*/
    	function query_first($query_string) {
            $this->query_string = $query_string;
    		$this->query($query_string);
    		$returnarray=$this->fetch_array($this->result);
    		$this->free_result($this->result);
    		return $returnarray;
      	}
      	
      	
      	/*
    	// Execute SELECT Query
    	// Field type: string
    	*/
    	function exec_select($table,$field,$exp,$return=false) {
    		$this->is_table($table);
    		if($field) {
                $this->query_string = "SELECT $field FROM $table $exp";
    			if ($return == false)
                {
                    return $this->query("SELECT $field FROM $table $exp");
                }
    			else
                {
                    return $this->query_first("SELECT $field FROM $table $exp");
                }
    		}
    	}
    	/*
    	// Execute INSERT Query
    	// $Data[$field_array][$data_array]
    	*/
    	function exec_insert($table,$data) {
    		$this->is_table($table);
    		if (is_array($data)) {
    			// parse data
    			$field_array = $data[0];
    			
    			if ( (is_array($field_array))&&(is_array($data[1])) ) {			
    				foreach ($data[1] as $key=>$item) {
    					if($this->AddQuoteOnExecQuery == "true") $data_array[] = $this->quote($data[1][$key]);
    					else $data_array[] = "'".$data[1][$key]."'";
    				}
    				$field_list = implode(',',$field_array);
    				$data_list = implode(',',$data_array);
    
                    $this->query_string = "INSERT INTO $table ($field_list) VALUES ($data_list)";
    				// executing query
    				$this->query("INSERT INTO $table ($field_list) VALUES ($data_list)");
    			} else { $this->exec_error('Error occurred INSERT QUERY executing'); }			
    		} else {
    			$this->exec_error('Error occurred during INSERT QUERY executing.
    			Data is not an array
    			');
    		}
    	}
    	
    	/*
    	// Execute UPDATE Query
    	// $Data[$field_array][$data_array]
    	*/
    	function exec_update($table,$data,$exp) {
    		$this->is_table($table);
    		if(is_array($data)) {
    			// parse data	
    			$field_array = $data[0];
    			$data_array = $data[1];
    			if ( (is_array($field_array))&&(is_array($data_array))&&($exp) ) {
    				$set_value_string = '';
    				foreach ($field_array as $key=>$item) {
    					if($this->AddQuoteOnExecQuery == "true") $set_value_string .= $field_array[$key]."=".$this->quote($data_array[$key]).",";
    					else $set_value_string .= $field_array[$key]."='".$data_array[$key]."',";
    				}
    				$set_value_string = substr($set_value_string,0,-1);
    
                    $this->query_string = "UPDATE $table SET $set_value_string $exp";
    				$this->query("UPDATE $table SET $set_value_string $exp");
    			} else { $this->exec_error('Error occurred UPDATE QUERY executing'); }
    		} else {
    			$this->exec_error('Error occurred during UPDATE QUERY executing.
    			Data is not an array
    			');
    		}
    	}
    	
    	/*
    	// Execute DELETE Query
    	*/
    	function exec_delete($table,$exp) {
    		$this->is_table($table);
    		if($exp) {
                $this->query_string = "DELETE FROM $table $exp";
    			$this->query("DELETE FROM $table $exp");
    		}
    		else { $this->exec_error('Error occurred DELETE QUERY executing'); }
    	}
    	
    	// =========================================
        // Fetch data and data returning
        // =========================================
    	/*
    	// fetch array
    	*/
        function fetch_array($query_id) {
            $this->record = mysql_fetch_array($query_id);
            return $this->record;
        }
    
        /*
        // fetch row
        */
        function fetch_row($query_id) {
        	$this->record = mysql_fetch_array($query_id);
        	return $this->record;
        }
        
        /*
        // fetch all
        */
        function fetch_all($obj) {
        	
        	$return_data = array();
        	
        	while ( $r = $this->fetch_array($obj)) {
        		$return_data[] = $r;	
        	}
        	
        	return $return_data;
        }
        
    	/*
    	// query execute
    	// return num rows
    	*/
        function num_rows($query_id=-1) {
            if ($query_id!=-1) $this->query_id=$query_id;
    		return mysql_num_rows($this->query_id);
      	}
    
    	/*
    	// Free query result
    	*/
        function free_result($query_id) {
            return @mysql_free_result($query_id);
        }
    	
    	/*
    	// Return tables information from DB selected
    	*/	
    	function tbl_list() {
    		$sql = mysql_query("SHOW TABLE STATUS FROM ".$this->db['db']);
    		while ($row = mysql_fetch_array($sql)) {
    			$tbl[] = $row;
    		}
    		return $tbl;
    		mysql_free_result($sql);
    	}
    
    	
    	
    	// =========================================
        // Required methods
        // =========================================
    	/*
    	// Valid table name
    	*/
    	function is_table($table) {
    		$tbl_list=array();
    		$result = mysql_list_tables($this->db['db']);
    		while($row = mysql_fetch_row($result)) {
    			$tbl_list[]=$row[0];
    		}
    		if(in_array($table,$tbl_list)==true) {
    			return true;
    		} else { 
    			$this->exec_error("Table doesn't exists");
    			return false; 
    		}
    	}
    
        // =========================================
        // API returning
        // =========================================
        function api_querystr()
        {
            return $this->query_string;
        }
    
    	// =========================================
        // Error reporting
        // =========================================
    	/*
    	// Executing error
    	*/
    	function exec_error($error) {
    		if ($error) {
    			$this->sql_error($error,'N/A');
    		}
    	}
    	
    
    	/*
    	// Error handle
    	*/
        function sql_error($message,$query) {
        	
    		if (function_exists(ob_start())) ob_clean();
    		
    		if($this->Debug==true)
    		{
    			die("
    			<font style='font-family:tahoma;font-size:11px;'>
    			<strong>MySQL Error:</strong> $message<br>
    			<strong>Error number:</strong> ".mysql_errno()." ".mysql_error()."<br>
    			<strong>Query String:</strong> ".$query."<br>
    			<strong>Date:</strong> ".date("D, F j,Y H:i:s")."<br>
    			<strong>Your IP:</strong> ".getenv("REMOTE_ADDR")."<br>
    			<strong>Your browser:</strong> ".getenv("HTTP_USER_AGENT")."<br>
    			<strong>Script:</strong> ".getenv("REQUEST_URI")."<br>
    			<strong>Referer:</strong> ".getenv("HTTP_REFERER")."<br>
    			<strong>PHP Version:</strong> ".PHP_VERSION."<br>
    			<strong>OS:</strong> ".PHP_OS."<br>
    			<strong>Server:</strong> ".getenv("SERVER_SOFTWARE")."<br>
    			<strong>Server name:</strong> ".getenv("SERVER_NAME")."<br>
    			");
    		}
    		else {
    			$a = gmdate('h-i d-m-Y').": ".mysql_errno()." ".mysql_error()."\n";
    			
    			if(is_dir('.'))
    			{
    				$handle = gmdate('d-m-Y');
    			
    				if(($handle = fopen($handle,'a+')) === FALSE)
    				{
    					return false;
    				}
    				else 
    				{
    					if (fwrite($handle, $a) === FALSE) 
    					{
    						return false;
    					}
    					else return true;
    				
    					fclose($handle);
    				}
    			}
    			header('location: '.URL_ROOT.'/errors/500.html');
    		}
    		
    		exit();
        }
    	
    	// =========================================
        // Mysql Close
        // =========================================
    	function Close()
    	{
    		mysql_close();
    	}
    }
?>